#pragma once

#include<hiredis/hiredis.h>
#include<thread>
#include<functional>


using namespace std;

class Redis{
public:
    //默认构造和析构
    Redis();
    ~Redis();

    //连接redis服务器
    bool connect();

    //向redis指定的通道channel发布消息
    bool publish(int channel, string message);

    //向redis指定的通道subscribe消息
    bool subscribe(int channel);

    //向redis指定的通道unsubscribe消息
    bool unsubscribe(int channel);

    //在独立的线程中接收订阅通道中的消息
    void observer_channel_message();

    //初始化向业务层上报通道消息的回调对象
    void init_notify_handler(function<void(int,string)> func);

private:
    //hiredis 同步上下文对象，负责publish消息
    redisContext* _publish_context;
    //负责subscribe消息
    redisContext* _subscribe_context;
    //回调操作，收到了回调消息，给service上报
    function<void(int,string)> _notify_message_handler;
};